<template>
  <view class="page">
    <!-- 新用户提示 -->
    <view class="new-user-notice" v-if="userLevel === 0">
      <view class="notice-content">
        <view class="notice-icon">
          <text class="iconfont icon-info"></text>
        </view>
        <view class="notice-text">
          <text class="notice-title">完成一单后才能开启</text>
          <text class="notice-subtitle">购买任意商品即可激活您的账户</text>
        </view>
      </view>
    </view>

    <!-- 消费检查提示 -->
    <view class="consumption-notice" v-if="userLevel > 0 && !canInvite">
      <view class="notice-content">
        <view class="notice-icon">
          <text class="iconfont icon-warning"></text>
        </view>
        <view class="notice-text">
          <text class="notice-title">需要完成消费才能邀请</text>
          <text class="notice-subtitle">{{ inviteMessage }}</text>
        </view>
      </view>
    </view>

    <!-- 邀请卡片 -->
    <view class="invite-card" v-if="canInvite">
      <view class="card-header">
        <text class="card-title">邀请好友加入</text>
        <text class="card-subtitle">分享你的专属邀请码，好友下单你就有收益</text>
      </view>
      
      <!-- 二维码区域 -->
      <view class="qrcode-section">
        <view class="qrcode-container">
          <image 
            v-if="qrcodeUrl"
            :src="qrcodeUrl" 
            class="qrcode-img" 
            mode="aspectFit"
            @error="onQRCodeError"
            @load="onQRCodeLoad"
          ></image>
          <view class="qrcode-loading" v-if="qrcodeLoading || !qrcodeUrl">
            <view class="loading-spinner"></view>
            <text class="loading-text">{{ qrcodeLoading ? '生成中...' : '准备生成...' }}</text>
          </view>
        </view>
        <text class="qrcode-tip">扫一扫上方二维码，立即加入我的团队</text>
        <button 
          v-if="!qrcodeUrl && !qrcodeLoading" 
          class="regenerate-btn" 
          @click="() => generateQRCode()"
        >
          重新生成二维码
        </button>
      </view>
      
      <!-- 邀请码 - 已注释 -->
      <!-- <view class="invite-code-section">
        <text class="invite-label">我的邀请码</text>
        <view class="invite-code-row">
          <text class="invite-code">{{ inviteCode }}</text>
          <button class="copy-btn" @click="copyInviteCode">复制</button>
        </view>
      </view> -->
      
      <!-- 邀请链接 -->
      <view class="invite-url-section">
        <text class="invite-label">邀请链接</text>
        <view class="invite-url-row">
          <text class="invite-url">{{ inviteUrl || '正在生成中...' }}</text>
          <button class="copy-btn" @click="copyInviteUrl" :disabled="!inviteUrl">复制链接</button>
        </view>
      </view>
      
      <!-- 生成海报按钮 -->
      <view class="poster-section">
        <button class="generate-poster-btn" @click="generatePosterPreview" :disabled="!canInvite || posterLoading">
          <text class="iconfont icon-image"></text>
          <text>{{ posterLoading ? '生成中...' : '生成邀请海报' }}</text>
        </button>
      </view>
      
      <!-- 海报预览区域 -->
      <view class="poster-preview" v-if="posterPreviewUrl">
        <view class="preview-title">
          <text>邀请海报</text>
        </view>
        <view class="preview-container">
          <image 
            :src="posterPreviewUrl" 
            class="preview-image" 
            mode="aspectFit"
            @error="onPreviewError"
            @load="onPreviewLoad"
            @click="previewFullImage"
          ></image>
        </view>
        <view class="preview-actions">
        </view>
      </view>
    </view>

    <!-- 邀请说明 -->
    <view class="invite-rules" v-if="canInvite">
      <view class="rules-title">
        <text class="title-text">邀请规则</text>
      </view>
      <view class="rules-content">
        <tm-html v-if="inviteRules" :content="inviteRules"></tm-html>
        <!-- 默认规则（当配置为空时显示） -->
        <view v-else class="rules-list">
          <view class="rule-item">
            <view class="rule-icon">1</view>
            <view class="rule-content">
              <text class="rule-title">邀请好友</text>
              <text class="rule-desc">分享邀请码给好友，好友注册成功即可建立邀请关系</text>
            </view>
          </view>
          <view class="rule-item">
            <view class="rule-icon">2</view>
            <view class="rule-content">
              <text class="rule-title">好友下单</text>
              <text class="rule-desc">好友在平台完成订单支付，您就能获得对应的直推奖励</text>
            </view>
          </view>
          <view class="rule-item">
            <view class="rule-icon">3</view>
            <view class="rule-content">
              <text class="rule-title">升级店长</text>
              <text class="rule-desc">邀请2个好友且都完成订单，即可升级为店长，享受更多收益</text>
            </view>
          </view>
        </view>
      </view>
    </view>

    <!-- 隐藏的canvas用于生成海报 -->
    <canvas 
      canvas-id="posterCanvas" 
      id="posterCanvas"
      style="position: fixed; top: -9999px; left: -9999px; width: 300px; height: 500px;"
    ></canvas>

  </view>
</template>

<script lang="ts" setup>
import { ref, computed } from 'vue'
import { onLoad, onPullDownRefresh } from '@dcloudio/uni-app'
import { getLinkageRelation, generateInviteQRCode, getParams, checkCanInvite, user } from '@/utils/api'

// 定义API响应类型
interface ApiResponse<T = any> {
  code: number
  msg: string
  data: T
}

interface LinkageRelationData {
  relation?: {
    user_id?: string | number
    level?: number
    nickname?: string
    username?: string
  }
}

interface InviteCheckData {
  can_invite?: boolean
  message?: string
}

interface ConfigData {
  invite_rule?: string
}

interface QRCodeData {
  qrcode_url?: string
  invite_url?: string
  invite_code?: string
}

interface UserData {
  id?: number
  username?: string
  nickname?: string
  mobile?: string
  avatar?: string
  user?: {
    id?: number
    username?: string
    nickname?: string
    mobile?: string
    avatar?: string
  }
}

// 数据定义
const qrcodeUrl = ref('')
const inviteCode = ref('000001')
const userInfo = ref<any>({})
const loading = ref(false)
const qrcodeLoading = ref(false)

// 邀请链接（从后端获取）
const inviteUrl = ref('')

// 邀请规则配置
const inviteRules = ref('')

// 用户状态相关
const userLevel = ref(0) // 0=新用户，1=普通用户，2=店长
const canInvite = ref(false) // 是否可以邀请
const inviteMessage = ref('') // 邀请提示信息

// 海报相关
const posterLoading = ref(false) // 海报生成中
const userNickname = ref('') // 用户昵称
const posterPreviewUrl = ref('') // 海报预览URL

// 页面加载
onLoad(() => {
  loadData()
})

onPullDownRefresh(() => {
  loadData().finally(() => {
    uni.stopPullDownRefresh()
  })
})

// 加载数据
const loadData = async () => {
  if (loading.value) return
  loading.value = true
  
  try {
    // 并行加载用户关系、配置、邀请检查和用户信息
    const [relationRes, configRes, inviteCheckRes, userRes] = await Promise.all([
      getLinkageRelation({}) as Promise<ApiResponse<LinkageRelationData>>,
      getParams({fields: ['invite_rule']}) as Promise<ApiResponse<ConfigData>>,
      checkCanInvite({}) as Promise<ApiResponse<InviteCheckData>>,
      user({}) as Promise<ApiResponse<UserData>>
    ])
    console.log('getRelation API响应:', relationRes)
    console.log('getParams API响应:', configRes)
    console.log('user API响应:', userRes)
    
    // 处理用户信息
    if (relationRes.code === 1 && relationRes.data) {
      userInfo.value = relationRes.data.relation || {}
      userLevel.value = relationRes.data.relation?.level || 0
      console.log('API返回的用户信息:', relationRes.data)
    } else {
      console.warn('getRelation API调用失败:', relationRes.msg)
    }
    
    // 处理用户详细信息
    if (userRes.code === 1 && userRes.data) {
      console.log('API返回的用户详细信息:', userRes.data)
      
      // 用户信息在 data.user 对象中
      const userData = userRes.data.user || userRes.data
      console.log('用户数据对象:', userData)
      console.log('用户数据字段:', Object.keys(userData))
      
      // 尝试多个可能的字段名
      userNickname.value = userData.nickname || 
                          userData.username || 
                          (userData as any).name || 
                          (userData as any).real_name ||
                          (userData as any).nick_name ||
                          (userData as any).user_name ||
                          '用户'
      console.log('最终选择的昵称:', userNickname.value)
    } else {
      console.warn('user API调用失败:', userRes.msg)
      // 如果API失败，尝试从本地存储获取用户信息
      const localUserInfo = uni.getStorageSync('userInfo')
      if (localUserInfo) {
        console.log('从本地存储获取用户信息:', localUserInfo)
        userNickname.value = localUserInfo.nickname || localUserInfo.username || localUserInfo.name || '用户'
      } else {
        userNickname.value = '用户'
      }
    }
    
    // 处理邀请检查结果
    if (inviteCheckRes.code === 1 && inviteCheckRes.data) {
      canInvite.value = inviteCheckRes.data.can_invite || false
      inviteMessage.value = inviteCheckRes.data.message || ''
      console.log('邀请检查结果:', inviteCheckRes.data)
    } else {
      console.warn('邀请检查API调用失败:', inviteCheckRes.msg)
    }
    
    // 处理邀请规则配置
    if (configRes.code === 1 && configRes.data) {
      inviteRules.value = configRes.data.invite_rule || ''
      console.log('API返回的邀请规则配置:', configRes.data.invite_rule)
    } else {
      console.warn('getParams API调用失败:', configRes.msg)
    }
    
    // 生成邀请码（基于用户ID）- 无论API是否成功都执行
    let userId = userInfo.value.user_id || uni.getStorageSync('id') || uni.getStorageSync('user_id')
    
    // 如果从API获取失败，尝试从token中解析用户ID
    if (!userId || userId === '000000' || userId === '1') {
      console.log('尝试从token中解析用户ID')
      const h5LoginData = uni.getStorageSync('h5_login_data')
      if (h5LoginData) {
        try {
          const loginData = JSON.parse(h5LoginData)
          userId = loginData.user_id || loginData.id
          console.log('从h5_login_data获取用户ID:', userId)
        } catch (e) {
          console.error('解析h5_login_data失败:', e)
        }
      }
    }
    
    // 如果用户ID获取失败，尝试从其他来源获取
    if (!userId || userId === '000000' || userId === '1') {
      console.warn('用户ID获取异常，尝试重新获取')
      // 尝试从其他存储位置获取
      const altUserId = uni.getStorageSync('userInfo')?.id || uni.getStorageSync('userInfo')?.user_id
      if (altUserId) {
        userId = altUserId
        console.log('从备用位置获取用户ID:', altUserId)
      } else {
        // 如果还是获取不到，提示用户重新登录
        console.error('无法获取用户ID，请重新登录')
        uni.showToast({
          title: '请重新登录',
          icon: 'none',
          duration: 2000
        })
        setTimeout(() => {
          uni.navigateTo({
            url: '/pages/login/h5login'
          })
        }, 2000)
        return
      }
    }
    
    console.log('用户ID获取调试:', {
      userInfo_user_id: userInfo.value.user_id,
      storage_id: uni.getStorageSync('id'),
      storage_user_id: uni.getStorageSync('user_id'),
      final_userId: userId,
      relationRes: relationRes
    })
    
    inviteCode.value = userId.toString().padStart(6, '0')
    
    // 只有在可以邀请时才生成二维码
    if (canInvite.value) {
      generateQRCode()
    }
    
    console.log('邀请页面数据加载完成:', {
      userInfo: userInfo.value,
      inviteCode: inviteCode.value
    })
    
  } catch (error) {
    console.error('加载邀请数据失败:', error)
    uni.showToast({
      title: '加载失败',
      icon: 'none'
    })
  } finally {
    loading.value = false
  }
}

// 生成二维码
const generateQRCode = async (retryCount = 0) => {
  qrcodeLoading.value = true
  
  try {
    // 检查用户ID是否有效
    const userId = parseInt(inviteCode.value)
    if (!userId || userId === 0) {
      throw new Error('用户ID无效，请重新登录')
    }
    
    console.log('生成二维码参数:', {
      inviteCode: inviteCode.value,
      userId: userId
    })
    
    // 调用后端API生成二维码
    const res = await generateInviteQRCode({
      user_id: userId // 传递原始用户ID，不是补零格式
    }) as ApiResponse<QRCodeData>
    
    if (res.code === 1 && res.data) {
      qrcodeUrl.value = res.data.qrcode_url || ''
      inviteUrl.value = res.data.invite_url || '' // 使用后端返回的邀请链接
      console.log('二维码生成成功:', {
        inviteUrl: res.data.invite_url,
        qrcodeUrl: res.data.qrcode_url,
        inviteCode: res.data.invite_code
      })
    } else {
      throw new Error(res.msg || '二维码生成失败')
    }
  } catch (error) {
    console.error('生成二维码失败:', error)
    
    // 重试机制：最多重试2次
    if (retryCount < 2) {
      console.log(`二维码生成失败，正在重试 (${retryCount + 1}/2)`)
      setTimeout(() => {
        generateQRCode(retryCount + 1)
      }, 1000)
      return
    }
    
    // 重试失败后显示错误提示
    uni.showToast({
      title: '二维码生成失败，请稍后重试',
      icon: 'none'
    })
    // 清空二维码URL，显示加载状态
    qrcodeUrl.value = ''
  } finally {
    qrcodeLoading.value = false
  }
}

// 二维码加载成功
const onQRCodeLoad = () => {
  console.log('二维码加载成功')
  qrcodeLoading.value = false
}

// 二维码加载失败
const onQRCodeError = () => {
  console.error('二维码加载失败')
  qrcodeLoading.value = false
  // 清空二维码URL，重新生成
  qrcodeUrl.value = ''
  uni.showToast({
    title: '二维码加载失败，正在重新生成',
    icon: 'none'
  })
  // 延迟重新生成二维码
  setTimeout(() => {
    generateQRCode()
  }, 1000)
}

// 复制邀请码
const copyInviteCode = () => {
  uni.setClipboardData({
    data: inviteCode.value,
    success: () => {
      uni.showToast({
        title: '邀请码已复制',
        icon: 'success'
      })
    },
    fail: () => {
      uni.showToast({
        title: '复制失败',
        icon: 'none'
      })
    }
  })
}

// 复制邀请链接
const copyInviteUrl = () => {
  if (!inviteUrl.value) {
    uni.showToast({
      title: '邀请链接生成中，请稍后',
      icon: 'none'
    })
    return
  }
  
  uni.setClipboardData({
    data: inviteUrl.value,
    success: () => {
      uni.showToast({
        title: '邀请链接已复制',
        icon: 'success'
      })
    },
    fail: () => {
      uni.showToast({
        title: '复制失败',
        icon: 'none'
      })
    }
  })
}

// 生成海报预览
const generatePosterPreview = async () => {
  if (posterLoading.value) return
  
  posterLoading.value = true
  
  try {
    // 检查必要数据
    if (!inviteCode.value) {
                    uni.showToast({
        title: '邀请码数据不完整，请稍后重试',
                      icon: 'none'
                    })
      return
    }
    
    // 如果用户昵称为空，重新获取用户信息
    if (!userNickname.value || userNickname.value === '用户') {
      console.log('用户昵称为空，重新获取用户信息...')
      try {
        const userRes = await user({}) as ApiResponse<UserData>
        if (userRes.code === 1 && userRes.data) {
          console.log('重新获取的用户详细信息:', userRes.data)
          
          // 用户信息在 data.user 对象中
          const userData = userRes.data.user || userRes.data
          console.log('重新获取的用户数据对象:', userData)
          console.log('重新获取的用户数据字段:', Object.keys(userData))
          
          // 尝试多个可能的字段名
          userNickname.value = userData.nickname || 
                              userData.username || 
                              (userData as any).name || 
                              (userData as any).real_name ||
                              (userData as any).nick_name ||
                              (userData as any).user_name ||
                              '用户'
          console.log('重新获取的用户昵称:', userNickname.value)
        }
      } catch (error) {
        console.error('重新获取用户信息失败:', error)
        userNickname.value = '用户'
      }
    }
    
    console.log('开始生成海报预览，数据:', {
      inviteCode: inviteCode.value,
      userNickname: userNickname.value
    })
    
    // 创建canvas上下文
    const canvasId = 'posterCanvas'
    const ctx = uni.createCanvasContext(canvasId)
    
    if (!ctx) {
      throw new Error('无法创建Canvas上下文')
    }
    
    // 设置canvas尺寸 - 使用背景图片原始尺寸
    const canvasWidth = 300
    const canvasHeight = 500 // 只使用背景图片的高度
    
    console.log('开始绘制海报...')
    
    // 绘制背景图片
    drawBackground(ctx, canvasWidth, canvasHeight)
    
    // 绘制白边区域
    drawWhiteBorder(ctx, canvasWidth, canvasHeight)
    
    // 绘制邀请人信息
    drawInviterInfo(ctx, canvasWidth, canvasHeight)
    
    // 绘制二维码 - 在白边上面
    drawQRCodeOnWhiteBorder(ctx, canvasWidth, canvasHeight)
    
    console.log('绘制完成，开始导出图片...')
    
    // 绘制完成
    ctx.draw(false, () => {
      console.log('Canvas绘制完成，开始导出...')
      
      // 导出图片 - 指定导出尺寸
      uni.canvasToTempFilePath({
        canvasId: canvasId,
        x: 0,
        y: 0,
        width: canvasWidth,
        height: canvasHeight,
        destWidth: canvasWidth * 2, // 提高清晰度
        destHeight: canvasHeight * 2, // 提高清晰度
        success: (res) => {
          console.log('图片导出成功:', res.tempFilePath)
          console.log('导出尺寸:', canvasWidth, 'x', canvasHeight)
          // 设置预览URL
          posterPreviewUrl.value = res.tempFilePath
        },
        fail: (err) => {
          console.error('导出图片失败:', err)
          uni.showToast({
            title: '生成海报失败',
            icon: 'none'
          })
        }
      })
    })
    
  } catch (error: any) {
    console.error('生成海报失败:', error)
    uni.showToast({
      title: '生成海报失败: ' + (error?.message || '未知错误'),
      icon: 'none'
    })
  } finally {
    posterLoading.value = false
  }
}

// 保存邀请海报（生成预览）
const savePoster = () => {
  generatePosterPreview()
}

// 从预览保存海报
const savePosterFromPreview = () => {
  if (posterPreviewUrl.value) {
    saveImageToAlbum(posterPreviewUrl.value)
  } else {
    uni.showToast({
      title: '请先生成海报预览',
      icon: 'none'
    })
  }
}

// 重新生成海报
const regeneratePoster = () => {
  posterPreviewUrl.value = ''
  generatePosterPreview()
}

// 预览图片加载成功
const onPreviewLoad = () => {
  console.log('海报预览加载成功')
}

// 预览图片加载失败
const onPreviewError = () => {
  console.error('海报预览加载失败')
  uni.showToast({
    title: '预览图片加载失败',
    icon: 'none'
  })
}

// 全屏预览图片
const previewFullImage = () => {
  if (posterPreviewUrl.value) {
    uni.previewImage({
      urls: [posterPreviewUrl.value],
      current: posterPreviewUrl.value
    })
  }
}

// 绘制背景图片
const drawBackground = (ctx: any, width: number, height: number) => {
  // 绘制背景色
  ctx.setFillStyle('#ff6b6b')
  ctx.fillRect(0, 0, width, height)
  
  // 绘制背景图片 - 直接使用原始尺寸
  const bgImage = '/static/img/invite_poster_bg.jpg'
  // 原图尺寸 300*500，直接使用原始尺寸
  const originalWidth = 300
  const originalHeight = 500
  
  // 直接绘制背景图片，不缩放
  ctx.drawImage(bgImage, 0, 0, originalWidth, originalHeight)
  
  // 绘制标题文字
  ctx.setFillStyle('#ffffff')
  ctx.setFontSize(36)
  ctx.setTextAlign('center')
  ctx.setFontSize(24)
}

// 绘制白边区域 - 覆盖在背景图片底部
const drawWhiteBorder = (ctx: any, width: number, height: number) => {
  // 背景图片原始尺寸
  const originalWidth = 300
  const originalHeight = 500
  
  // 绘制白色背景 - 覆盖背景图片的底部，带圆角
  const whiteHeight = 110
  const whiteY = originalHeight - whiteHeight
  const borderRadius = 12
  console.log('绘制白边区域:', { whiteY, whiteHeight, originalWidth })
  
  ctx.setFillStyle('#ffffff')
  // 绘制只有上面圆角的矩形
  ctx.beginPath()
  const x = 0
  const y = whiteY
  const w = originalWidth
  const h = whiteHeight
  const r = borderRadius
  
  // 只绘制上面两个圆角
  ctx.moveTo(x + r, y)
  ctx.lineTo(x + w - r, y)
  ctx.arcTo(x + w, y, x + w, y + r, r)
  ctx.lineTo(x + w, y + h)
  ctx.lineTo(x, y + h)
  ctx.lineTo(x, y + r)
  ctx.arcTo(x, y, x + r, y, r)
  ctx.closePath()
  ctx.fill()
  
  // 不绘制分割线，避免白框效果
  
  console.log('白边区域绘制完成')
}

// 绘制邀请人信息
const drawInviterInfo = (ctx: any, width: number, height: number) => {
  // 背景图片原始尺寸
  const originalWidth = 300
  const originalHeight = 500
  
  const leftPadding = 20
  const topPadding = originalHeight - 50 // 在白边区域内，与二维码齐平
  
  // 绘制"2+1"标题 - 使用黑色
  ctx.setFillStyle('#000000')
  ctx.setFontSize(22)
  ctx.setTextAlign('left')
  ctx.fillText('华顿云-共赢集团', leftPadding, topPadding)
  
  // 绘制邀请人信息 - 全部使用红色，下移一点
  const inviterTopPadding = originalHeight - 20
  ctx.setFillStyle('#ff6b6b')
  ctx.setFontSize(14)
  ctx.setTextAlign('left')
  ctx.fillText('邀请人:', leftPadding, inviterTopPadding)
  
  // 绘制邀请人昵称 - 使用从API获取的用户昵称
  const displayName = userNickname.value || '用户'
  console.log('绘制邀请人信息，昵称:', displayName)
  
  ctx.setFillStyle('#ff6b6b')
  ctx.setFontSize(16)
  ctx.fillText(displayName, leftPadding + 55, inviterTopPadding)
}


// 绘制二维码在白边上 - 放在最右边
const drawQRCodeOnWhiteBorder = (ctx: any, width: number, height: number) => {
  console.log('开始绘制二维码，qrcodeUrl:', qrcodeUrl.value)
  if (qrcodeUrl.value) {
    // 背景图片原始尺寸
    const originalWidth = 300
    const originalHeight = 500
    
    const qrSize = 75
    const qrX = originalWidth - qrSize - 15 // 在背景图片右边缘，留15px边距
    const qrY = originalHeight - 85 // 在白边区域内，再上移15px
    
    console.log('二维码绘制位置:', { qrX, qrY, qrSize })
    
    // 绘制二维码
    ctx.drawImage(qrcodeUrl.value, qrX, qrY, qrSize, qrSize)
    console.log('二维码绘制完成')
    
    // 绘制二维码提示文字 - 在二维码下方
    ctx.setFillStyle('#333333')
    ctx.setFontSize(16)
    ctx.setTextAlign('center')
  }
}

// 保存图片到相册 - 兼容不同平台
const saveImageToAlbum = (filePath: string) => {
  // #ifdef APP-PLUS
  // App端使用plus.io
  plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, (fs) => {
    if (fs && fs.root) {
      fs.root.getFile('invite_poster.jpg', { create: true }, (fileEntry) => {
      fileEntry.createWriter((writer) => {
        writer.onwrite = () => {
          plus.gallery.save(fileEntry.toURL(), () => {
            console.log('海报保存到相册成功')
            uni.showToast({
              title: '海报已保存到相册',
              icon: 'success'
            })
          }, (err) => {
            console.error('保存到相册失败:', err)
            uni.showToast({
              title: '保存失败，请检查相册权限',
              icon: 'none'
            })
          })
        }
        writer.write(plus.io.convertLocalFileSystemURL(filePath))
      })
    })
    }
  })
  // #endif
  
  // #ifdef H5
  // H5端提供下载链接
  const link = document.createElement('a')
  link.href = filePath
  link.download = 'invite_poster.jpg'
  document.body.appendChild(link)
  link.click()
  document.body.removeChild(link)
  
  uni.showToast({
    title: '海报已下载',
    icon: 'success'
  })
  // #endif
  
  // #ifdef MP-WEIXIN
  // 微信小程序端
    uni.saveImageToPhotosAlbum({
    filePath: filePath,
      success: () => {
      console.log('海报保存到相册成功')
        uni.showToast({
          title: '海报已保存到相册',
          icon: 'success'
        })
      },
    fail: (err) => {
      console.error('保存到相册失败:', err)
      // 如果保存失败，提供预览功能
      uni.previewImage({
        urls: [filePath],
        current: filePath
      })
        uni.showToast({
        title: '请长按图片保存',
          icon: 'none'
        })
      }
    })
  // #endif
  
  // #ifdef MP-ALIPAY
  // 支付宝小程序端
  uni.saveImageToPhotosAlbum({
    filePath: filePath,
    success: () => {
      console.log('海报保存到相册成功')
    uni.showToast({
        title: '海报已保存到相册',
      icon: 'success'
    })
    },
    fail: (err) => {
      console.error('保存到相册失败:', err)
    uni.showToast({
        title: '保存失败，请检查相册权限',
      icon: 'none'
    })
  }
  })
  // #endif
}

</script>

<style lang="scss" scoped>
@import './invite.scss';
</style>

